package field

import (
	"yunj/pkg/yunj/core/builder/form"
)

// 自定义
type Custom struct {
	form.Field
	Html     string                              `json:"html"` // 自定义的html
	HtmlFunc func(field *Custom) (string, error) `json:"-"`    // 返回自定义的html和错误
}

func NewCustom(id string) *Custom {
	f := &Custom{}
	form.SetFieldInstance(&f.Field, f)
	f.SetFieldId(id)
	return f
}

// 设置标题
func (f *Custom) SetTitle(title string) *Custom {
	f.Title = title
	return f
}

// 设置默认值
func (f *Custom) SetDefault(def any) *Custom {
	f.Default = def
	return f
}

// 设置描述
func (f *Custom) SetDesc(desc string) *Custom {
	f.Desc = desc
	return f
}

// 设置验证规则
func (f *Custom) SetVerify(rule string) *Custom {
	f.Verify = rule
	return f
}

// 设置验证标题
func (f *Custom) SetVerifyTitle(verifyTitle string) *Custom {
	f.VerifyTitle = verifyTitle
	return f
}

// 增加验证规则
func (f *Custom) AddVerify(rule string) *Custom {
	f.AddFieldVerify(rule)
	return f
}

// 设置是否只读
func (f *Custom) SetReadonly(yes bool) *Custom {
	f.Readonly = yes
	return f
}

// 设置栅格布局
// 超小屏幕(手机<768px)、小屏幕(平板≥768px)、中等屏幕(桌面≥992px)、大型屏幕(桌面≥1200px)、超大屏幕(桌面≥1400px)
// 总列数：12
func (f *Custom) SetGrid(num ...any) *Custom {
	f.Grid = num
	return f
}

// 设置权限
func (f *Custom) SetAuth(auth string) *Custom {
	f.Auth = auth
	return f
}

// 设置自定义的html
func (f *Custom) SetHtml(html string) *Custom {
	f.Html = html
	return f
}

// 设置返回自定义的html和错误的回调方法
func (f *Custom) SetHtmlFunc(fun func(field *Custom) (string, error)) *Custom {
	f.HtmlFunc = fun
	return f
}

// 处理属性
func (c *Custom) HandleAttr() error {
	if c.Html == "" && c.HtmlFunc != nil {
		html, err := c.HtmlFunc(c)
		if err != nil {
			return c.SetError(err)
		}
		c.Html = html
	}
	return nil
}
